/*****************************************************
消息 :$GPRMC,100646.000,A,3109.9704,N,12123.4219,E,0.257,335.62,291216,,,A*59
ID :            $GPRMC                   协议头
UTC时间:         100646.000                  hhmmss.sss
状态:            A                           A=数据有效；V=数据无效
纬度 :           2109.9704                   ddmm.mmmm
N/S:              N                          N=北，S=南
经度:           11123.4219                   dddmm.mmmm
E/W :             E                          W=西，E=东
地面速度:        0.25                        Knot（节）
对地真航向        21.48                      cog（度）
日期            291216                        ddmmyy
磁变量           无
定位模式标志     A								A=自主模式，E=估算模式，N=数据无效，D=差分模式
导航状态标志位    V                            V=系统不输出导航状态信息
校验和           *59
<CR><LF>                                     消息结束
******************************************************/
#ifndef __GPS__H
#define __GPS__H
// #include "sys.h"
#include "stdint.h"
#include "string.h"
#include "stdlib.h"
#include "stdio.h"
// 启动命令

#define HotStart "$PCAS10,0*1C\r\n"	   // Gps系统热启动
#define WarmStart "$PCAS10,1*1D\r\n"   // Gps系统温启动
#define ColdStart "$PCAS10,2*1E\r\n"   // Gps系统冷启动
#define ReColdStart "$PCAS10,3*1F\r\n" // Gps系统重置冷启动

// 卫星定位模式设置
#define SingleGps "$PCAS04,1*18\r\n"	 // 单 GPS
#define GPSandGLONASS "$PCAS04,2*1B\r\n" // 单BEIDOU
#define GPSandBEIDOU "$PCAS04,3*1A\r\n"	 // GPS+BEIDOU

/******************************************
//配置输出 NMEA 消息的间隔（ms 单位）
Arg1: 200-10000
******************************************/
#define delay1sNMEA "$PCAS02,500*1A\r\n" // 每秒输出2个定位点

/******************************************
//配置 NMEA 输出版本
2: NMEA >4.1
5: BDS/GPS NMEA >2.3 =4.0
9: GPS NMEA0183 2.2
******************************************/
#define SetNMEA41 "$PCAS05,2*1A\r\n"

// 设置 NMEA 输出波特率，默认9600
#define SetBps115200 "$PCAS01,5*19\r\n"

/*******************************************
设置 NMEA 语句输出使能
Arg1: nGGA “0”，关闭； “1”，打开
Arg2: nGLL “0”，关闭； “1”，打开
Arg3: nGSA “0”，关闭； “1”，打开
Arg4: nGSV “0”，关闭； “1”，打开
Arg5: nRMC “0”，关闭； “1”，打开
....
*******************************************/
// #define EnableRMC "$PCAS03,0,0,0,0,1,0,0,0,0,0,0,0,0*1f\r\n" // 不带保留位
#define EnableRMC "$PCAS03,0,0,0,0,1,0,0,0,0,0,,,0,0,,,,0*33\r\n"	//带保留位
#define EnableALL "$PCAS03,1,1,1,1,1,1,1,1,1,1,,,1,1,,,,1*33\r\n"
// 卫星接收控制
#define CloseSBAS "$PCAS15,4,0*1\r\n"			 // 关闭SBAS 功能
#define OpenSBAS "$PCAS15,4,FFFF*31\r\n"			 // 开启SBAS 1-16号卫星,星基增强系统
#define CloseBEIDOU32 "$PCAS15,2,0*7\r\n"		 // 关闭北斗1-32号卫星
#define OpenBEIDOU32 "$PCAS15,2,FFFFFFFF*37\r\n" // 开启北斗1-32号卫星
#define CloseQZSS "$PCAS15,5,0*0\r\n"			 // 关闭QZSS 功能
#define OpenQZSS "$PCAS15,5,1F*47\r\n"		 // 开启QZSS 功能,日本准天顶定位系统,覆盖小

// RMC_DATA结构体
typedef struct RMC_DATA
{
	char time[12];	// UTC时间,hhmmss.sss
	char state[12]; // 状态
	char lat[12];	// 纬度
//	char NS[2];		// N/S指示
//	char WE[2];		// W/E指示
	char lng[12];	// 经度
	char speed[12]; //对地速度
	char date[12];	// 日期,ddmmyy
	float speed_f;
	int SumCheck;    // 校验位
	float temp;
} rmc_data;
// 错误信息上传数据帧
typedef struct WARNING
{
	char start;		// 帧头
	uint8_t WarningFlag; // 从最低位到最高为分别表示：电池电量警告，GPS定位失败警告，电子围栏越界警告，跌倒警告，其他暂时预留。
	char end;		// 结束标志
} Warning;


void SendAtToGps(char *cmd);
void Gps_Init(void);
void AnalysisRMC(rmc_data *pRecRMC, char *USARTx_RX_BUF);

uint32_t AHT20_Calibrate(void);

uint32_t AHT20_StartMeasure(void);

uint32_t AHT20_GetMeasureResult(float* temp, float* humi);
void OH_TransmitHandle(rmc_data *pRecRMC, uint8_t *data);
//void GPS_UartDemo_Entry(void);
// void GpsRMCdataShow(void);
#endif
